# -*- coding: utf-8 -*-
"""
软中断节点 - 处理软中断相关的异常指标
"""

import json
from typing import Dict, Any
from langchain_ollama import OllamaLLM
from Agent.utils import interrupt_tool_1

# 调用本地大模型
llm = OllamaLLM(base_url="http://127.0.0.1:11434", model="deepseek-r1:7b")


def soft_interrupts_node(state: Dict[str, Any]) -> Dict[str, Any]:
    """软中断节点：处理软中断相关的异常指标"""
    print("进入soft_interrupts_node")

    current_solution = state.get("current_solution", {})
    if not current_solution:
        print("没有接收到解决方案")
        return {"type": "end"}

    # 检查当前方案是否需要调用此节点
    nodes_to_call = current_solution.get("content", {}).get("nodes_to_call", [])
    if "soft_interrupts_node" in nodes_to_call:
        print("根据解决方案，开始分析软中断相关问题...")

        # 构建软中断节点的提示词
        interrupt_prompt = f"""
        你是一个专门处理软中断和系统中断分析的智能运维助手。

        你收到了以下来自boss节点的解决方案：
        {json.dumps(current_solution, indent=2, ensure_ascii=False)}

        请分析这个解决方案中与软中断相关的内容，并决定：
        1. 是否需要执行软中断相关的工具
        2. 如果需要，应该按什么顺序执行哪些工具
        3. 对每个工具执行的预期结果

        可用的软中断工具包括：
        - interrupt_tool_1: 软中断分析工具
        """

        # 调用LLM分析
        try:
            llm_response = llm.invoke(interrupt_prompt)
            print(f"软中断节点LLM分析结果: {llm_response}")

            # 解析LLM响应（这里简化处理，实际应该解析JSON）
            if ("true" in llm_response.lower() or "中断" in llm_response or
                    "interrupt" in llm_response.lower()):
                print("LLM决定执行软中断工具...")

                # 获取需要调用的工具
                tools_required = current_solution.get("content", {}).get("tools_required", {}).get(
                    "soft_interrupts_node", [])

                for tool_name in tools_required:
                    if tool_name == "interrupt_tool_1":
                        result = interrupt_tool_1()
                        print(f"执行{tool_name}: {result}")

                print("软中断节点处理完成")
            else:
                print("LLM决定不执行软中断工具")

        except Exception as e:
            print(f"软中断节点LLM调用失败: {e}")
            # 降级处理：直接执行工具
            tools_required = current_solution.get("content", {}).get("tools_required", {}).get("soft_interrupts_node",
                                                                                               [])
            for tool_name in tools_required:
                if tool_name == "interrupt_tool_1":
                    result = interrupt_tool_1()
                    print(f"执行{tool_name}: {result}")

        # 检查是否还有其他节点需要调用
        remaining_nodes = [node for node in nodes_to_call if node != "soft_interrupts_node"]
        if remaining_nodes:
            return {"type": remaining_nodes[0]}
        else:
            return {"type": "end"}
    else:
        print("当前方案不需要调用软中断节点")
        return {"type": "end"}